/**
 * 创建一个软连接，
 * 读取软连接指向的文件的内容
 * 读取软连接的文件内容
*/

#include <stdio.h>
#include <stdlib.h>

#include <strings.h>
#include <unistd.h>

#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
    if (argc < 3)
    {
        printf("Usage : %s <src_file> <dest_files>", argv[0]);
        exit(EXIT_FAILURE);
    }

    // 创建软连接
    if (symlink(argv[1], argv[2]) != 0)
    {
        perror("Symlink error : ");
        exit(EXIT_FAILURE);
    }
    printf("Create Symlink Success\n");

    // 读取软链接指向的文件的内容,并输出到标准输出
    int fd = open(argv[2], O_RDWR);
    if (fd == -1)
    {
        perror("Open error: ");
        exit(EXIT_FAILURE);
    }

    int res;
    char buf[4096] = {0};
    if ((res = read(fd, buf, 4096)) < 0)
    {
        perror("Read error: ");
        exit(EXIT_FAILURE);
    }
    printf("Source File Data : ");
    fflush(stdout);
    write(STDOUT_FILENO, buf, res);
    printf("\n");
    close(fd);

    // 读取软连接的内容，并输出到标准输出
    bzero(buf, 4096);
    if ((res = readlink(argv[2], buf, 4096)) < 0)
    {
        perror("Readlink error: ");
    }
    printf("Symlink File Data : ");
    fflush(stdout);
    write(STDOUT_FILENO, buf, res);
    printf("\n");
    return 0;
}